package com.itheima.reggie.controller;

import com.itheima.reggie.common.ServerResultVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.util.UUID;

/**
 * upload and download files
 * @author 武帅丞
 * @date 2024/09/21
 */
@Slf4j
@RequestMapping("/common")
@RestController
public class CommonController {

    @Value("${reggie.path}")
    private String basePath;

    @PostMapping("/upload")
    public ServerResultVO<String> upload(MultipartFile file) throws Throwable {
        log.info("upload");
        File dir = new File(basePath);
        if (!dir.exists()) {
            dir.mkdir();
        }
        String originalFilename = file.getOriginalFilename();
        String currentFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf('.'));
        file.transferTo(new File(dir.getPath() + "/" + currentFileName));
        return ServerResultVO.success(currentFileName);
    }

    @GetMapping("/download")
    public void download(String name, HttpServletResponse response) throws Throwable {
        FileInputStream fileInputStream = new FileInputStream(new File(basePath + name));
        ServletOutputStream outputStream = response.getOutputStream();

        response.setContentType("image/jpeg");

        int len = 0;
        byte[] img = new byte[1024];
        while ((len = fileInputStream.read(img)) != -1) {
            outputStream.write(img, 0, len);
            outputStream.flush();
        }

        fileInputStream.close();
        outputStream.close();

    }
}
